from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName("test_spark_app").setMaster("local")
# 执行环境入口对象
sc = SparkContext(conf=conf)

rdd = sc.parallelize([1,2,3,4,5])

def fun(data):
    return data *10

# map方法：接受一个成员方法，对 RDD 对象中的每一项都执行成员方法并且返回一个 RDD 对象
# rdd1 = rdd.map(fun)
rdd1 = rdd.map(lambda x: x*10).map(lambda x: x+5).collect() #链式调用
print(rdd1)

# flatmap和 map 功能一样，区别是 flatmap可以解构多嵌套数据
flatmap_rdd = sc.parallelize(['adc def','ghi jkl','mno pqr' 'stu vwxyz'])
rdd2 = flatmap_rdd.map(lambda x:x.split(' ')).collect() #[['adc', 'def'], ['ghi', 'jkl'], ['mno', 'pqrstu', 'vwxyz']]
rdd3 = flatmap_rdd.flatMap(lambda x:x.split(' ')).collect() #['adc', 'def', 'ghi', 'jkl', 'mno', 'pqrstu', 'vwxyz']
print(rdd3)

# reduceByKey自动分组，然后按照成员方法计算返回
reduce_rdd = sc.parallelize([('a',78),('b',67),('c',56),('c',44),('b',88),("b",67),('a',23)])
rdd4 = reduce_rdd.reduceByKey(lambda x,y:x*y).collect()
print(rdd4)
